//axios封装网络请求
import thisAxios from 'axios'
import router from '@/router';
import {
    getToken
} from './token';
import {
    Notify
} from 'vant';
const axios = thisAxios.create({
    baseURL: 'http://toutiao.itheima.net',
    timeout: 20000 //20秒超时时间(请求20秒无响应直接判定超时)
})

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    //目标:统一携带token
    //判断本地有token再携带,判断具体api/index.js里如果没有携带Authorization,我在添加上去
    if (getToken()?.length > 0 && config.headers.Authorization === undefined) {
        config.headers.Authorization = `Bearer ${getToken()}`
    }
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
}, function (error) {
    // 对响应错误做点什么
    // console.dir(error, '报错');
    if (error.response.status === 401) {
        Notify({
            type: "warning",
            message: "身份已过期"
        });
        // 不能使用this.$router(因为this不是vue组件对无法调用$router)
        //解决:this.$router为了拿到router路由对象，所以直接去引入@/router/下的router对象
        router.replace('/login')
    }
    return Promise.reject(error);
});

export default ({
    url,
    method = 'GET',
    params = {},
    data = {},
    headers = {}
}) => {
    return axios({
        url,
        method,
        params,
        data,
        headers
    })
}